js实现【JSON格式化】

您所在的位置:网站首页 json js js实现【JSON格式化】

js实现【JSON格式化】

#js实现【JSON格式化】| 来源: 网络整理| 查看: 265

JSON格式化步骤 识别出有效JSON 去掉所有空格缩进换行 识别{},:进行格式化: {},换行 :后面加空格 注意要点:JSON的键值中,也可能在字符串中存在{},:。例如:{"a{},:b": 0}。格式化时需要先排除这部分内容。 JSON去除空格 + 过滤无效JSON /* param1 JSONstr 未格式化的JSON字符串 return 去【类空格字符】后的JSON字符串 */ function JSONTrim(JSONstr) { try { JSONstr = JSONstr.replace(/'/g, '"'); JSONstr = JSON.stringify(JSON.parse(JSONstr)); } catch (error) { // 转换失败错误提示 console.error('json数据格式有误...'); console.error(error); JSONstr = null; } return JSONstr; } 复制代码JSON格式化 /* param1 JSONstr 未格式化的JSON字符串 return 格式化后的JSON字符串 */ function JSONFormat(JSONstr) { JSONstr = JSONTrim(JSONstr); // 初步格式化json let re = new RegExp('\\{|\\}|,|:', 'g'); // 匹配格式化后的json中的{},: let exec = null; let InvalidFs = 0; let InvalidBs = 0; while(exec = re.exec(JSONstr)) { // 找{},: let frontToCurrent = exec.input.substr(0, exec.index + 1); // 匹配开头到当前匹配字符之间的字符串 if (frontToCurrent.replace(/\\"/g, "").replace(/[^"]/g, "").length%2 != 0) { // 测试当前字符到开头"的数量,为双数则被判定为目标对象 if(exec[0] === '{') InvalidFs++; else if(exec[0] === '}') InvalidBs++; continue; // 不是目标对象,手动跳过 } let keyTimesF = frontToCurrent.replace(/[^\{]/g, '').length - InvalidFs; // 找出当前匹配字符之前所有{的个数 let keyTimesB = frontToCurrent.replace(/[^\}]/g, '').length - InvalidBs; // 找出当前匹配字符之前所有}的个数 let indentationTimes = keyTimesF - keyTimesB; // 根据{个数计算缩进 if (exec[0] === '{') { JSONstr = JSONstr.slice(0,exec.index + 1) + '\n' + '\t'.repeat(indentationTimes) + JSONstr.slice(exec.index + 1); // 将缩进加入字符串 } else if(exec[0] === '}') { JSONstr = JSONstr.slice(0,exec.index) + '\n' + '\t'.repeat(indentationTimes) + JSONstr.slice(exec.index) // 将缩进加入字符串 re.exec(JSONstr); // 在查找目标前面插入字符串会回退本次查找,所以手动跳过本次查找 } else if(exec[0] === ',') { JSONstr = JSONstr.slice(0,exec.index + 1) + '\n' + '\t'.repeat(indentationTimes) + JSONstr.slice(exec.index + 1) } else if (exec[0] === ':') { JSONstr = JSONstr.slice(0,exec.index + 1) + ' ' + JSONstr.slice(exec.index + 1) } else { console.log(`匹配到了来路不明的${exec[0]}`) } } return JSONstr === null ? 'Invalid value' : JSONstr; } 复制代码示例字符串

可以将以下字符串打乱格式进行测试,包含了比较复杂的情况

{ "uu{{{{{{::}},}uc\\\"u": "kkkk", "oooooo": { }, "pp2": { "662": { "****": 9 }, "k": 88888 }, "c___9": true, "*": 3 } 复制代码demo

可以点击这里进行测试,欢迎拍砖!

bambibren.github.io/bejson/inde…

欢迎指教

这是我JSON格式化的思路,希望大家可以多多验证,指出问题。



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3